x86, hap: Track max_mapped_pfn better when using 2MB p2m mappings.
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 22 Oct 2008 10:58:20 +0000 (11:58 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 22 Oct 2008 10:58:20 +0000 (11:58 +0100)
The test for when to increase it was not quite right; also on EPT
the value it was set to didn't count the top 511 frames.

Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
xen/arch/x86/mm/hap/p2m-ept.c
xen/arch/x86/mm/p2m.c

index 8ed9c08f1fde8c8498e7f21c029857b3794d2324..689f152261c0b0484ac96c291e40e2a6e67622f5 100644 (file)
@@ -157,9 +157,6 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
     {
         if ( mfn_valid(mfn_x(mfn)) || (p2mt == p2m_mmio_direct) )
         {
-            /* Track the highest gfn for which we have ever had a valid mapping */
-            if ( gfn > d->arch.p2m->max_mapped_pfn )
-                d->arch.p2m->max_mapped_pfn = gfn;
             ept_entry->emt = epte_get_entry_emt(d, gfn, mfn_x(mfn));
             ept_entry->sp_avail = walk_level ? 1 : 0;
 
@@ -234,6 +231,11 @@ ept_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
         unmap_domain_page(split_table);
     }
 
+    /* Track the highest gfn for which we have ever had a valid mapping */
+    if ( mfn_valid(mfn_x(mfn))
+         && (gfn + (1UL << order) - 1 > d->arch.p2m->max_mapped_pfn) )
+        d->arch.p2m->max_mapped_pfn = gfn + (1UL << order) - 1;
+
     /* Success */
     rv = 1;
 
index 24957e00b49c5160aa40b02d00d60e401fd3a0f2..93f9489559eb6d5ea9c8e11fe420410869ac262d 100644 (file)
@@ -322,7 +322,8 @@ p2m_set_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
     }
 
     /* Track the highest gfn for which we have ever had a valid mapping */
-    if ( mfn_valid(mfn) && (gfn > d->arch.p2m->max_mapped_pfn) )
+    if ( mfn_valid(mfn) 
+         && (gfn + (1UL << page_order) - 1 > d->arch.p2m->max_mapped_pfn) )
         d->arch.p2m->max_mapped_pfn = gfn + (1UL << page_order) - 1;
 
     if ( iommu_enabled && (is_hvm_domain(d) || need_iommu(d)) )